/**
 * @description 实现异步请求封装
 */
import store from '@/store'
import router from '@/router'
import axios from 'axios'
import { deCodeApi, enCodeApi } from '@/util'


// 实现通用配置
const Axios = axios.create({
    baseURL: '/api',
    timeout: 5000
})




Axios.interceptors.request.use(function(config) {


    // 先获取token，然后加上token数据
    let token = store.getters['common/token']
    if (!token) {
        // 用户没有token数据，则这个请求就不能发起，所以这里直接返回错误信息
        return Promise.reject({code: 8080, message: '用户登录的token数据不存在或则已失效'})
    }

    // 在请求头上带上token数据
    config.headers['X-Token'] = token
    return config
})

// 实现 token 续期
Axios.interceptors.response.use(response => {
    // if (response.data.code === 400 && response.data.message === "token票据已过期，请重新登录") {
    //     router.push('/login')
    // } else {

    // }
    return response
})

/**
 * 为了支持async + await 写法，且减少代码量
 * @param {{url: String, method: 'GET' | 'POST' | 'DELETE' | 'PUT', data?: any, params?: any}} req 请求对象
 */
function request(req) {
    return new Promise(resolve => {
        Axios.request({
            url: req.url,
            method: req.method || 'GET',
            data: req.data || {},
            params: req.params || {}
        }).then(({data}) => {
            resolve(data)
        }).catch(e => {
            resolve(e)
        })
    })
}

export default request